export const CAMPAIGN_ADDRESS = "0x8A2725a6f04816A5274dDD9FEaDd3bd0C253C1A6";

export const CAMPAIGN_ABI = [
    {
        inputs: [
            { internalType: "address payable", name: "_treasury", type: "address" },
            { internalType: "string", name: "name", type: "string" },
            { internalType: "string", name: "version", type: "string" },
            { internalType: "address[]", name: "_tokenLockups", type: "address[]" },
        ],
        stateMutability: "nonpayable",
        type: "constructor",
    },
    { inputs: [], name: "ECDSAInvalidSignature", type: "error" },
    {
        inputs: [{ internalType: "uint256", name: "length", type: "uint256" }],
        name: "ECDSAInvalidSignatureLength",
        type: "error",
    },
    {
        inputs: [{ internalType: "bytes32", name: "s", type: "bytes32" }],
        name: "ECDSAInvalidSignatureS",
        type: "error",
    },
    {
        inputs: [
            { internalType: "address", name: "account", type: "address" },
            { internalType: "uint256", name: "currentNonce", type: "uint256" },
        ],
        name: "InvalidAccountNonce",
        type: "error",
    },
    { inputs: [], name: "InvalidShortString", type: "error" },
    { inputs: [], name: "ReentrancyGuardReentrantCall", type: "error" },
    {
        inputs: [{ internalType: "address", name: "token", type: "address" }],
        name: "SafeERC20FailedOperation",
        type: "error",
    },
    { inputs: [{ internalType: "string", name: "str", type: "string" }], name: "StringTooLong", type: "error" },
    {
        anonymous: false,
        inputs: [{ indexed: true, internalType: "bytes16", name: "id", type: "bytes16" }],
        name: "CampaignCancelled",
        type: "event",
    },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "bytes16", name: "id", type: "bytes16" },
            {
                components: [
                    { internalType: "address", name: "manager", type: "address" },
                    { internalType: "address", name: "token", type: "address" },
                    { internalType: "uint256", name: "amount", type: "uint256" },
                    { internalType: "uint256", name: "start", type: "uint256" },
                    { internalType: "uint256", name: "end", type: "uint256" },
                    { internalType: "enum ClaimCampaigns.TokenLockup", name: "tokenLockup", type: "uint8" },
                    { internalType: "bytes32", name: "root", type: "bytes32" },
                    { internalType: "bool", name: "delegating", type: "bool" },
                ],
                indexed: false,
                internalType: "struct ClaimCampaigns.Campaign",
                name: "campaign",
                type: "tuple",
            },
            { indexed: false, internalType: "uint256", name: "totalClaimers", type: "uint256" },
        ],
        name: "CampaignStarted",
        type: "event",
    },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "bytes16", name: "id", type: "bytes16" },
            {
                components: [
                    { internalType: "address", name: "tokenLocker", type: "address" },
                    { internalType: "uint256", name: "start", type: "uint256" },
                    { internalType: "uint256", name: "cliff", type: "uint256" },
                    { internalType: "uint256", name: "period", type: "uint256" },
                    { internalType: "uint256", name: "periods", type: "uint256" },
                ],
                indexed: false,
                internalType: "struct ClaimCampaigns.ClaimLockup",
                name: "claimLockup",
                type: "tuple",
            },
        ],
        name: "ClaimLockupCreated",
        type: "event",
    },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "address", name: "recipient", type: "address" },
            { indexed: true, internalType: "uint256", name: "amount", type: "uint256" },
        ],
        name: "Claimed",
        type: "event",
    },
    { anonymous: false, inputs: [], name: "EIP712DomainChanged", type: "event" },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "bytes16", name: "id", type: "bytes16" },
            { indexed: true, internalType: "address", name: "claimer", type: "address" },
            { indexed: true, internalType: "uint256", name: "tokenId", type: "uint256" },
            { indexed: false, internalType: "uint256", name: "amountClaimed", type: "uint256" },
            { indexed: false, internalType: "uint256", name: "amountRemaining", type: "uint256" },
        ],
        name: "LockedTokensClaimed",
        type: "event",
    },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "address", name: "oldTreasury", type: "address" },
            { indexed: true, internalType: "address", name: "newTreasury", type: "address" },
        ],
        name: "TreasuryChanged",
        type: "event",
    },
    {
        anonymous: false,
        inputs: [
            { indexed: true, internalType: "bytes16", name: "id", type: "bytes16" },
            { indexed: true, internalType: "address", name: "claimer", type: "address" },
            { indexed: false, internalType: "uint256", name: "amountClaimed", type: "uint256" },
            { indexed: false, internalType: "uint256", name: "amountRemaining", type: "uint256" },
        ],
        name: "UnlockedTokensClaimed",
        type: "event",
    },
    {
        inputs: [{ internalType: "bytes16", name: "", type: "bytes16" }],
        name: "campaigns",
        outputs: [
            { internalType: "address", name: "manager", type: "address" },
            { internalType: "address", name: "token", type: "address" },
            { internalType: "uint256", name: "amount", type: "uint256" },
            { internalType: "uint256", name: "start", type: "uint256" },
            { internalType: "uint256", name: "end", type: "uint256" },
            { internalType: "enum ClaimCampaigns.TokenLockup", name: "tokenLockup", type: "uint8" },
            { internalType: "bytes32", name: "root", type: "bytes32" },
            { internalType: "bool", name: "delegating", type: "bool" },
        ],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [{ internalType: "bytes16[]", name: "campaignIds", type: "bytes16[]" }],
        name: "cancelCampaigns",
        outputs: [],
        stateMutability: "nonpayable",
        type: "function",
    },
    {
        inputs: [{ internalType: "address payable", name: "_newTreasury", type: "address" }],
        name: "changeTreasury",
        outputs: [],
        stateMutability: "nonpayable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "campaignId", type: "bytes16" },
            { internalType: "bytes32[]", name: "proof", type: "bytes32[]" },
            { internalType: "uint256", name: "claimAmount", type: "uint256" },
        ],
        name: "claim",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "campaignId", type: "bytes16" },
            { internalType: "bytes32[]", name: "proof", type: "bytes32[]" },
            { internalType: "uint256", name: "claimAmount", type: "uint256" },
            { internalType: "address", name: "delegatee", type: "address" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams",
                name: "delegationSignature",
                type: "tuple",
            },
        ],
        name: "claimAndDelegate",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16[]", name: "campaignIds", type: "bytes16[]" },
            { internalType: "bytes32[][]", name: "proofs", type: "bytes32[][]" },
            { internalType: "uint256[]", name: "claimAmounts", type: "uint256[]" },
            { internalType: "address[]", name: "delegatees", type: "address[]" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams[]",
                name: "delegationSignatures",
                type: "tuple[]",
            },
        ],
        name: "claimAndDelegateMultiple",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "campaignId", type: "bytes16" },
            { internalType: "bytes32[]", name: "proof", type: "bytes32[]" },
            { internalType: "address", name: "claimer", type: "address" },
            { internalType: "uint256", name: "claimAmount", type: "uint256" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams",
                name: "claimSignature",
                type: "tuple",
            },
            { internalType: "address", name: "delegatee", type: "address" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams",
                name: "delegationSignature",
                type: "tuple",
            },
        ],
        name: "claimAndDelegateWithSig",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [{ internalType: "bytes16", name: "", type: "bytes16" }],
        name: "claimLockups",
        outputs: [
            { internalType: "address", name: "tokenLocker", type: "address" },
            { internalType: "uint256", name: "start", type: "uint256" },
            { internalType: "uint256", name: "cliff", type: "uint256" },
            { internalType: "uint256", name: "period", type: "uint256" },
            { internalType: "uint256", name: "periods", type: "uint256" },
        ],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16[]", name: "campaignIds", type: "bytes16[]" },
            { internalType: "bytes32[][]", name: "proofs", type: "bytes32[][]" },
            { internalType: "uint256[]", name: "claimAmounts", type: "uint256[]" },
        ],
        name: "claimMultiple",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16[]", name: "campaignIds", type: "bytes16[]" },
            { internalType: "bytes32[][]", name: "proofs", type: "bytes32[][]" },
            { internalType: "address", name: "claimer", type: "address" },
            { internalType: "uint256[]", name: "claimAmounts", type: "uint256[]" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams",
                name: "claimSignature",
                type: "tuple",
            },
        ],
        name: "claimMultipleWithSig",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "campaignId", type: "bytes16" },
            { internalType: "bytes32[]", name: "proof", type: "bytes32[]" },
            { internalType: "address", name: "claimer", type: "address" },
            { internalType: "uint256", name: "claimAmount", type: "uint256" },
            {
                components: [
                    { internalType: "uint256", name: "nonce", type: "uint256" },
                    { internalType: "uint256", name: "expiry", type: "uint256" },
                    { internalType: "uint8", name: "v", type: "uint8" },
                    { internalType: "bytes32", name: "r", type: "bytes32" },
                    { internalType: "bytes32", name: "s", type: "bytes32" },
                ],
                internalType: "struct ClaimCampaigns.SignatureParams",
                name: "claimSignature",
                type: "tuple",
            },
        ],
        name: "claimWithSig",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "", type: "bytes16" },
            { internalType: "address", name: "", type: "address" },
        ],
        name: "claimed",
        outputs: [{ internalType: "bool", name: "", type: "bool" }],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "id", type: "bytes16" },
            {
                components: [
                    { internalType: "address", name: "manager", type: "address" },
                    { internalType: "address", name: "token", type: "address" },
                    { internalType: "uint256", name: "amount", type: "uint256" },
                    { internalType: "uint256", name: "start", type: "uint256" },
                    { internalType: "uint256", name: "end", type: "uint256" },
                    { internalType: "enum ClaimCampaigns.TokenLockup", name: "tokenLockup", type: "uint8" },
                    { internalType: "bytes32", name: "root", type: "bytes32" },
                    { internalType: "bool", name: "delegating", type: "bool" },
                ],
                internalType: "struct ClaimCampaigns.Campaign",
                name: "campaign",
                type: "tuple",
            },
            {
                components: [
                    { internalType: "address", name: "tokenLocker", type: "address" },
                    { internalType: "uint256", name: "start", type: "uint256" },
                    { internalType: "uint256", name: "cliff", type: "uint256" },
                    { internalType: "uint256", name: "period", type: "uint256" },
                    { internalType: "uint256", name: "periods", type: "uint256" },
                ],
                internalType: "struct ClaimCampaigns.ClaimLockup",
                name: "claimLockup",
                type: "tuple",
            },
            { internalType: "address", name: "vestingAdmin", type: "address" },
            { internalType: "uint256", name: "totalClaimers", type: "uint256" },
        ],
        name: "createLockedCampaign",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes16", name: "id", type: "bytes16" },
            {
                components: [
                    { internalType: "address", name: "manager", type: "address" },
                    { internalType: "address", name: "token", type: "address" },
                    { internalType: "uint256", name: "amount", type: "uint256" },
                    { internalType: "uint256", name: "start", type: "uint256" },
                    { internalType: "uint256", name: "end", type: "uint256" },
                    { internalType: "enum ClaimCampaigns.TokenLockup", name: "tokenLockup", type: "uint8" },
                    { internalType: "bytes32", name: "root", type: "bytes32" },
                    { internalType: "bool", name: "delegating", type: "bool" },
                ],
                internalType: "struct ClaimCampaigns.Campaign",
                name: "campaign",
                type: "tuple",
            },
            { internalType: "uint256", name: "totalClaimers", type: "uint256" },
        ],
        name: "createUnlockedCampaign",
        outputs: [],
        stateMutability: "payable",
        type: "function",
    },
    {
        inputs: [],
        name: "eip712Domain",
        outputs: [
            { internalType: "bytes1", name: "fields", type: "bytes1" },
            { internalType: "string", name: "name", type: "string" },
            { internalType: "string", name: "version", type: "string" },
            { internalType: "uint256", name: "chainId", type: "uint256" },
            { internalType: "address", name: "verifyingContract", type: "address" },
            { internalType: "bytes32", name: "salt", type: "bytes32" },
            { internalType: "uint256[]", name: "extensions", type: "uint256[]" },
        ],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [{ internalType: "address", name: "owner", type: "address" }],
        name: "nonces",
        outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [
            { internalType: "address", name: "", type: "address" },
            { internalType: "address", name: "", type: "address" },
            { internalType: "uint256", name: "", type: "uint256" },
            { internalType: "bytes", name: "", type: "bytes" },
        ],
        name: "onERC721Received",
        outputs: [{ internalType: "bytes4", name: "", type: "bytes4" }],
        stateMutability: "nonpayable",
        type: "function",
    },
    {
        inputs: [{ internalType: "address", name: "", type: "address" }],
        name: "tokenLockers",
        outputs: [{ internalType: "bool", name: "", type: "bool" }],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [],
        name: "treasury",
        outputs: [{ internalType: "address payable", name: "", type: "address" }],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [{ internalType: "bytes16", name: "", type: "bytes16" }],
        name: "usedIds",
        outputs: [{ internalType: "bool", name: "", type: "bool" }],
        stateMutability: "view",
        type: "function",
    },
    {
        inputs: [
            { internalType: "bytes32", name: "root", type: "bytes32" },
            { internalType: "bytes32[]", name: "proof", type: "bytes32[]" },
            { internalType: "address", name: "claimer", type: "address" },
            { internalType: "uint256", name: "amount", type: "uint256" },
        ],
        name: "verify",
        outputs: [{ internalType: "bool", name: "", type: "bool" }],
        stateMutability: "pure",
        type: "function",
    },
    { stateMutability: "payable", type: "receive" },
] as const;
